/**
 *  导出一个封装好的axios 实例
 */

import axios from "axios";
import { ElMessage } from "element-plus";

// 超时时间
const timeout = 1000;
// 异常 message 的映射
const errorMessageMap = {
  [`timeout of ${timeout}ms exceeded`]: "请求超时，请稍后重试",
};

// 创建一个 axios 实例
const request = axios.create({
  // 存放公共的一些配置， baseUrl、timeout
  baseURL: "http://localhost:3001",
  timeout,
});

// 请求拦截
request.interceptors.request.use(
  function (config) {
    const token = localStorage.getItem("token");
    if (token) {
      config.headers.token = token;
    }
    return config;
  },
  function (errot) {
    return Promise.reject(errot);
  }
);

// 响应拦截

request.interceptors.response.use(
  function (response) {
    // 1. 取出真实的接口返回数据
    const data = response.data;
    // 2. 判断 data.code 是否等于 '200'
    if (data.code === "200") {
      ElMessage({
        message: data.message || "OJBK",
        type: "success",
      });
      return data;
    } else {
      // 让代码进去 catch
      // alert(data.message);
      // 将 alert 美化，使用 组件库 message 方法
      ElMessage({
        message: data.message,
        type: "error",
      });
      return Promise.reject(data);
    }
  },
  function (error) {
    // 非 2xx 的响应做一些处理
    ElMessage({
      type: "error",
      // message: error.message,

      // 兼容处理   防止找不到message信息
      message: errorMessageMap[error.message] || "网络异常，请稍后重试~",
    });

    return Promise.reject(error);
  }
);

// 导出这个 request
export default request;
